這一篇和前幾天的美食網站例題差不多,都是去抓網址及文字,今天要示範的網站是奇摩電影的本週新片。
今天我想要列印出電影中文名稱、英文名稱、上映時間還有期待度。
第一步就是要先找出它真正的網址,其實有一個簡單的測試,上次我是看把畫面轉到第二頁時,上方的網址有沒有變動,如果有,就可以知道上方的網址列就是我要用的網址。今天的這個網頁也是會變動的,不需要另外找隱藏的網址~
現在正式進入程式編寫,一開始先匯入待會會用到的兩個函示庫requests&BeautifulSoup,用get()方法發送請求來取得網頁,將網頁的HTML程式碼取回來後,在response.text中可以取得網頁內容,再建立BeautifulSoup物件,這部分官方建議使用lxml的解析方法,因為速度快、相容性也好,不過我這邊就只用預設的而已,可以看你的需求做選擇,接著我們就能解析網頁的內容並擷取所需的資料。
import requests
from bs4 import BeautifulSoup
url = 'https://movies.yahoo.com.tw/movie_thisweek.html'
response = requests.get(url)
html = BeautifulSoup(response.text, "html.parser")
透過html.find_all找出在網頁中所有class為release_info的div標籤,這裡面包的就是每一部電影的資料,它會回傳一個list,再透過for迴圈並使用find方法取出每一部電影中以下四個資訊,至於為什麼用find是因為一部電影內只有一組我需要的資料,用find就可以了~
info_items = html.find_all("div", {"class":"release_info"})
for item in info_items:
name = item.find("div", {"class":"release_movie_name"}).a.text.strip()
en = item.find("div", {"class":"en"}).a.text.strip()
release_time = item.find("div", {"class":"release_movie_time"}).text.split(':')[-1].strip()
level = item.find("div", {"class":"leveltext"}).span.text
中英文的片名 (name、en)是release_movie_name和en這兩個class裡的div標籤裡面的a標籤,講起來好繞口,總之你們自己點點看HTML程式碼就會很清楚了,接著再透過text取得字串後在使用strip()方法刪除兩邊多餘的空白,仔細看片名的左邊有很長的空白,右邊不一定有,反正strip()可以一次性的刪除兩邊的空白。至於上映日期 (release_time)則是先使用split()方法將日期根據冒號來分割,它就會回傳一個list像是['上映日期 ', '2022-09-16'],接著再使用[-1]取出最後一個元素,也就是日期的部分。
都取得所需資料後就是要寫進檔案裡了,記得要先創建一個本週新片.txt
否則會發生錯誤。最後可以順便把結果列印出來看看。
with open("本週新片.txt", "w", encoding="utf-8") as f:
for item in info_items:
name = item.find("div", {"class":"release_movie_name"}).a.text.strip()
en = item.find("div", {"class":"en"}).a.text.strip()
release_time = item.find("div", {"class":"release_movie_time"}).text.split(':')[-1].strip()
level = item.find("div", {"class":"leveltext"}).span.text
f.write("電影名稱: "+name+'\n')
f.write("英文名稱: "+en+'\n')
f.write("上映時間: "+release_time+'\n')
f.write("期待度: "+level+'\n')
f.write("-"*30+'\n')
print("電影名稱:", name)
print("英文名稱:", en)
print("上映時間:", release_time)
print("期待度:", level)
print("-"*30)
import requests
from bs4 import BeautifulSoup
url = "https://movies.yahoo.com.tw/movie_thisweek.html"
response = requests.get(url)
html = BeautifulSoup(response.text, "html.parser")
info_items = html.find_all("div", {"class":"release_info"})
with open("本週新片.txt", "w", encoding="utf-8") as f:
for item in info_items:
name = item.find("div", {"class":"release_movie_name"}).a.text.strip()
en = item.find("div", {"class":"en"}).a.text.strip()
release_time = item.find("div", {"class":"release_movie_time"}).text.split(':')[-1].strip()
level = item.find("div", {"class":"leveltext"}).span.text
f.write("電影名稱: "+name+'\n')
f.write("英文名稱: "+en+'\n')
f.write("上映時間: "+release_time+'\n')
f.write("期待度: "+level+'\n')
f.write("-"*30+'\n')
print("電影名稱:", name)
print("英文名稱:", en)
print("上映時間:", release_time)
print("期待度:", level)
print("-"*30)